/*
 * ControladorIDsLibres.h
 *
 *  Created on: 13/04/2010
 *      Author: Grupo Glow
 */

#ifndef CONTROLADORIDSLIBRES_H_
#define CONTROLADORIDSLIBRES_H_

#include <stdio.h>

typedef unsigned int Tid;

typedef struct {
	//Cantidad total de IDs libres que hay
	unsigned int cantidadLibres;
	//Cuantas IDs hay en el buffer
	unsigned int cantidadEnBufferIDs;
	//Cuantas IDs puede tener como maximo el buffer
	unsigned int cantidadMaxBufferIDs;
	//Cuentas IDs puede almacenar cada bloque
	unsigned int cantidadIDsBloque;
	//La longitud del bloque
	unsigned int longitudBloque;
	//IDs libres
	Tid * bufferIDs;
	//Archivo con las IDs
	FILE * handleArchivo;
} ControladorIDsLibres;

/*
 * Iniciar el controlador. Si el controlador ya existe (existe el archivo) lo carga.
 */
void ControladorIDsLibres_Iniciar(ControladorIDsLibres * controlador,char * nombreArchivo, unsigned int longitudBloque);

/*
 * Finaliza el controlador liberando los recursos.
 */
void ControladorIDsLibres_cerrar(ControladorIDsLibres * controlador);

/*
 * Agrega un ID libre al controlador
 */
void ControladorIDsLibres_addIDLibre (ControladorIDsLibres * controlador,unsigned int id);

/*
 * Devuelve un ID que esta libre.
 */
unsigned int ControladorIDsLibres_getIDLibre(ControladorIDsLibres * controlador);

/*
 * Devuelve 1 si tiene alguna ID libre, 0 en caso contrario.
 */
unsigned int ControladorIDsLibres_tieneIDLibre(ControladorIDsLibres * controlador);

/*
 * Devuelve un vector con todos los ids libres y en el puntero "cantidad" cuantos son.
 * Esta funcion solo informa, no libera los IDs.
 */
Tid * ControladorIDsLibres_getAllLibres(ControladorIDsLibres * controlador, unsigned int * cantidad);


#endif /* CONTROLADORIDSLIBRES_H_ */
